home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK2.toast / Development Kits (Disc 2) / ScriptX / Draggable ScriptX Folders / utils / c-api / memobj.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-21  |  2.0 KB  |  95 lines  |  [TEXT/ttxt]

  1.  
  2. /*
  3.     memobj.c
  4.     Test access to C fields in a memory object.
  5. */
  6.  
  7. #include "SXextend.h"
  8. #include <string.h>
  9.  
  10. typedef struct mystruct {
  11.     SXchar        ch;
  12.     SXshort        sh;
  13.     SXint        in;
  14.     SXdouble    db;
  15.     SXchar        nc[10];
  16.     SXchar        *st;
  17.     } mystruct;
  18.  
  19. static SXchar buffer[128];
  20. static SXchar scratch[] = "Scratch";
  21. #define    SYSMOD    NULL
  22.  
  23. SXobject defStruct()
  24. {
  25.     SXobject    mem;
  26.     mystruct    *mp;
  27.     
  28.     mem = SXextMakeMemoryObject(sizeof(mystruct),
  29.                 EXT_ELEMENT("ch", EXT_TYPE_SXCHAR, mystruct, ch),
  30.                 EXT_ELEMENT("sh", EXT_TYPE_SXSHORT, mystruct, sh),
  31.                 EXT_ELEMENT("in", EXT_TYPE_SXINT, mystruct, in),
  32.                 EXT_ELEMENT("db", EXT_TYPE_SXDOUBLE, mystruct, db),
  33.                 EXT_ELEMENT("nc", EXT_TYPE_SXN_CHAR, mystruct, nc),
  34.                 EXT_ELEMENT("st", EXT_TYPE_SXCHAR_STAR, mystruct, st),
  35.                 NULL);
  36.     SXlockMem(mem);
  37.     mp = SXdereference(mem);
  38.     mp->st = buffer;
  39.     SXunlockMem(mem);
  40.     SXextMakeGlobal(scratch, "mem", mem);
  41.     return SXundefined;
  42. }
  43.  
  44. SXobject fillStruct()
  45. {
  46.     SXobject    mem;
  47.     mystruct    *mp;
  48.     
  49.     mem = SXextGetGlobal(scratch, "mem");
  50.     SXlockMem(mem);
  51.     mp = SXdereference(mem);
  52.     mp->ch = 'I';
  53.     mp->sh = 500;
  54.     mp->in = 128000;
  55.     mp->db = 3.14;
  56.     strcpy(mp->nc, "foo");
  57.     strcpy(buffer, "This is a test.");
  58.     SXunlockMem(mem);
  59.     return SXundefined;
  60. }
  61.  
  62. void crlf()
  63. {
  64.     SXwriteString(debug, "\n");
  65. }
  66.  
  67. SXobject dumpStruct()
  68. {
  69.     SXobject    mem;
  70.     mystruct    *mp;
  71.     SXchar        localbuf[8];
  72.     
  73.         mem = SXextGetGlobal(scratch, "mem");
  74.     SXlockMem(mem);
  75.     mp = SXdereference(mem);
  76.     localbuf[0] = mp->ch;
  77.     localbuf[1] = '\0';
  78.     SXwriteString(debug, localbuf); crlf();
  79.     SXextCall(SYSMOD, "print", SXintToObject(mp->sh), debug, NULL);
  80.     SXextCall(SYSMOD, "print", SXintToObject(mp->in), debug,  NULL);
  81.     SXextCall(SYSMOD, "print", SXdoubleToObject(mp->db), debug,  NULL);
  82.     SXwriteString(debug, mp->nc); crlf();
  83.     SXwriteString(debug, buffer); crlf();
  84.     SXunlockMem(mem);
  85.     return SXundefined;
  86. }
  87.  
  88. SXobject entryPoint(SXobject ld, SXobject grp, SXobject uni)
  89. {
  90.     SXextMakeFunction(scratch, "fillStruct", fillStruct, 0, 0);
  91.     SXextMakeFunction(scratch, "dumpStruct",dumpStruct, 0, 0);
  92.     defStruct();
  93.     return trueObject;
  94. }
  95.